home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / game10 / vectdemo / vectdemo.pas < prev   
Pascal/Delphi Source File  |  1994-03-25  |  14KB  |  573 lines

  1. Program _3D_Filled_Vectorgraphics_Demo;
  2. {
  3.  ┌────────────────────────────────────────────────────────────────────────┐
  4.  │ G∙A∙M∙E - Gaming Applications Made Easy v1.0ß      (C)1993/94 L.Bakker │
  5.  │                                                                        │
  6.  │ A simple program to demonstrate G∙A∙M∙E's abilities to do 3D-filled    │
  7.  │ vector graphics. Have fun!                                             │
  8.  └────────────────────────────────────────────────────────────────────────┘
  9. }
  10.  
  11.  
  12. {$IfDef Ver70}
  13. {$R-,S-,B-,Q-,F-,E-,N-,A+,X+}
  14. {$Else} {$IfDef Ver60}
  15. {$R-,S-,B-,F-,E-,N-,A+,X+}
  16. {$Endif} {$EndIf}
  17.  
  18.  
  19. Uses TGK_MAIN,TGK_TEXT,TGK_GP,TGK_3D,TGK_IO,TGK_SND;
  20.  
  21. Const X1 : Integer =  3; { Increments for moving objects: }
  22.       Y1 : Integer =  3;
  23.       X2 : Integer = -3;
  24.       Y2 : Integer =  6;
  25.  
  26. Procedure MakeChecker(Nr:Word);
  27. Var X,Y:Byte;
  28. Begin
  29.  InitObject(Nr);
  30.   For X:=1 to 10 do
  31.    For Y:=1 to 10 do
  32.     AddPoint(Nr,X*20,Y*20,0);
  33.   For X:=1 to 9 do
  34.    For Y:=1 to 9 do
  35.     AddSurface4(Nr,(10*(X-1))+Y+1,(10*X)+Y+1,(10*X)+Y,(10*(X-1))+Y,X+Y*2+192,0);
  36. End;
  37.  
  38. Procedure MakeCube(Nr:Word);
  39. Begin
  40.  InitObject(Nr);
  41.  AddPoint(Nr, 50,-50,-50);
  42.  AddPoint(Nr, 50, 50,-50);
  43.  AddPoint(Nr, 50, 50, 50);
  44.  AddPoint(Nr, 50,-50, 50);
  45.  
  46.  AddPoint(Nr,-50,-50,-50);
  47.  AddPoint(Nr,-50, 50,-50);
  48.  AddPoint(Nr,-50, 50, 50);
  49.  AddPoint(Nr,-50,-50, 50);
  50.  
  51.  AddSurface4(Nr,1,2,3,4,4,19);
  52.  AddSurface4(Nr,4,3,7,8,7,40);
  53.  AddSurface4(Nr,8,7,6,5,5,48);
  54.  AddSurface4(Nr,5,6,2,1,9,46);
  55.  AddSurface4(Nr,6,7,3,2,6,45);
  56.  AddSurface4(Nr,8,5,1,4,8,47);
  57. End;
  58.  
  59. Procedure MakePresent(Nr:Word);
  60. Begin
  61.  InitObject(Nr);
  62.  
  63.  AddPoint(Nr,-50,-50, 50); {1}  {Front - Row #1}
  64.  AddPoint(Nr,-50,-10, 50);
  65.  AddPoint(Nr,-50, 10, 50);
  66.  AddPoint(Nr,-50, 50, 50); {4}
  67.  
  68.  AddPoint(Nr,-50,-50, 10); {5}  {Front - Row #2}
  69.  AddPoint(Nr,-50,-10, 10);
  70.  AddPoint(Nr,-50, 10, 10);
  71.  AddPoint(Nr,-50, 50, 10); {8}
  72.  
  73.  AddPoint(Nr,-50,-50,-10); {9}  {Front - Row #3}
  74.  AddPoint(Nr,-50,-10,-10);
  75.  AddPoint(Nr,-50, 10,-10);
  76.  AddPoint(Nr,-50, 50,-10); {12}
  77.  
  78.  AddPoint(Nr,-50,-50,-50); {13} {Front - Row #4}
  79.  AddPoint(Nr,-50,-10,-50);
  80.  AddPoint(Nr,-50, 10,-50);
  81.  AddPoint(Nr,-50, 50,-50); {16}
  82.  
  83.  
  84.  AddPoint(Nr, 50,-50, 50); {17} {Back - Row #1}
  85.  AddPoint(Nr, 50,-10, 50);
  86.  AddPoint(Nr, 50, 10, 50);
  87.  AddPoint(Nr, 50, 50, 50); {20}
  88.  
  89.  AddPoint(Nr, 50,-50, 10); {21} {Back - Row #2}
  90.  AddPoint(Nr, 50,-10, 10);
  91.  AddPoint(Nr, 50, 10, 10);
  92.  AddPoint(Nr, 50, 50, 10); {24}
  93.  
  94.  AddPoint(Nr, 50,-50,-10); {25} {Back - Row #3}
  95.  AddPoint(Nr, 50,-10,-10);
  96.  AddPoint(Nr, 50, 10,-10);
  97.  AddPoint(Nr, 50, 50,-10); {28}
  98.  
  99.  AddPoint(Nr, 50,-50,-50); {29} {Back - Row #4}
  100.  AddPoint(Nr, 50,-10,-50);
  101.  AddPoint(Nr, 50, 10,-50);
  102.  AddPoint(Nr, 50, 50,-50); {32}
  103.  
  104.  
  105.  AddPoint(Nr,-10,-50, 50); {33}  {FM - Row #1}
  106.  AddPoint(Nr,-10,-10, 50);
  107.  AddPoint(Nr,-10, 10, 50);
  108.  AddPoint(Nr,-10, 50, 50); {36}
  109.  
  110.  AddPoint(Nr,-10, 50, 10); {37} {FM Right}
  111.  AddPoint(Nr,-10, 50,-10); {38}
  112.  
  113.  AddPoint(Nr,-10,-50,-50); {39}  {FM - Row #4}
  114.  AddPoint(Nr,-10,-10,-50);
  115.  AddPoint(Nr,-10, 10,-50);
  116.  AddPoint(Nr,-10, 50,-50); {42}
  117.  
  118.  AddPoint(Nr,-10,-50, 10); {43} {FM Left}
  119.  AddPoint(Nr,-10,-50,-10); {44}
  120.  
  121.  
  122.  AddPoint(Nr, 10,-50, 50); {45}  {BM - Row #1}
  123.  AddPoint(Nr, 10,-10, 50);
  124.  AddPoint(Nr, 10, 10, 50);
  125.  AddPoint(Nr, 10, 50, 50); {48}
  126.  
  127.  AddPoint(Nr, 10, 50, 10); {49} {FM Right}
  128.  AddPoint(Nr, 10, 50,-10); {50}
  129.  
  130.  AddPoint(Nr, 10,-50,-50); {51}  {FM - Row #4}
  131.  AddPoint(Nr, 10,-10,-50);
  132.  AddPoint(Nr, 10, 10,-50);
  133.  AddPoint(Nr, 10, 50,-50); {54}
  134.  
  135.  AddPoint(Nr, 10,-50, 10); {55} {FM Left}
  136.  AddPoint(Nr, 10,-50,-10); {56}
  137.  
  138.  AddSurface4(Nr,17,18,22,21,105,0); {Achtervlak}
  139.  AddSurface4(Nr,19,20,24,23,105,0);
  140.  AddSurface4(Nr,25,26,30,29,105,0);
  141.  AddSurface4(Nr,27,28,32,31,105,0);
  142.  
  143.  AddSurface4(Nr,18,19,23,22,4,2);
  144.  AddSurface4(Nr,21,22,26,25,4,2);
  145.  AddSurface4(Nr,22,23,27,26,4,2);
  146.  AddSurface4(Nr,23,24,28,27,4,2);
  147.  AddSurface4(Nr,26,27,31,30,4,2);
  148.  
  149.  AddSurface4(Nr,17,45,46,18,106, 0); {Achter-Midden}
  150.  AddSurface4(Nr,19,47,48,20,106, 0);
  151.  AddSurface4(Nr,18,46,47,19,4, 2);
  152.  
  153.  AddSurface4(Nr,20,48,49,24,108, 0);
  154.  AddSurface4(Nr,28,50,54,32,108, 0);
  155.  AddSurface4(Nr,24,49,50,28,4, 2);
  156.  
  157.  AddSurface4(Nr,32,54,53,31,107,0);
  158.  AddSurface4(Nr,30,52,51,29,107,0);
  159.  AddSurface4(Nr,31,53,52,30,4, 2);
  160.  
  161.  AddSurface4(Nr,56,25,29,51,109,0);
  162.  AddSurface4(Nr,45,17,21,55,109,0);
  163.  AddSurface4(Nr,55,21,25,56,4, 2);
  164.  
  165.  AddSurface4(Nr,45,33,34,46,4, 2); {Midden Midden}
  166.  AddSurface4(Nr,46,34,35,47,4, 2);
  167.  AddSurface4(Nr,47,35,36,48,4, 2);
  168.  
  169.  AddSurface4(Nr,48,36,37,49,4, 2);
  170.  AddSurface4(Nr,49,37,38,50,4, 2);
  171.  AddSurface4(Nr,50,38,42,54,4, 2);
  172.  
  173.  AddSurface4(Nr,54,42,41,53,4, 2);
  174.  AddSurface4(Nr,53,41,40,52,4, 2);
  175.  AddSurface4(Nr,52,40,39,51,4, 2);
  176.  
  177.  AddSurface4(Nr,44,56,51,39,4, 2);
  178.  AddSurface4(Nr,43,55,56,44,4, 2);
  179.  AddSurface4(Nr,33,45,55,43,4, 2);
  180.  
  181.  
  182.  AddSurface4(Nr,33, 1, 2,34,106, 0); {Voor-Midden}
  183.  AddSurface4(Nr,35, 3, 4,36,106, 0);
  184.  AddSurface4(Nr,34, 2, 3,35,4, 2);
  185.  
  186.  AddSurface4(Nr,36, 4, 8,37,108, 0);
  187.  AddSurface4(Nr,38,12,16,42,108, 0);
  188.  AddSurface4(Nr,37, 8,12,38,4, 2);
  189.  
  190.  AddSurface4(Nr,42,16,15,41,107,0);
  191.  AddSurface4(Nr,40,14,13,39,107,0);
  192.  AddSurface4(Nr,41,15,14,40,4, 2);
  193.  
  194.  AddSurface4(Nr, 9,44,39,13,109, 0);
  195.  AddSurface4(Nr, 1,33,43, 5,109, 0);
  196.  AddSurface4(Nr, 5,43,44, 9,4, 2);
  197.  
  198.  
  199.  AddSurface4(Nr, 1, 5, 6, 2,110,0); {VoorVlak}
  200.  AddSurface4(Nr, 3, 7, 8, 4,110,0);
  201.  AddSurface4(Nr, 9,13,14,10,110,0);
  202.  AddSurface4(Nr,11,15,16,12,110,0);
  203.  
  204.  AddSurface4(Nr, 2, 6, 7, 3,4,2);
  205.  AddSurface4(Nr, 5, 9,10, 6,4,2);
  206.  AddSurface4(Nr, 6,10,11, 7,4,2);
  207.  AddSurface4(Nr, 7,11,12, 8,4,2);
  208.  AddSurface4(Nr,10,14,15,11,4,2);
  209. End;
  210.  
  211. Procedure MakeMTV(Nr:Word);
  212. Begin
  213.  InitObject(Nr);
  214.  
  215.  AddPoint(Nr, 25,-50,-50);
  216.  AddPoint(Nr, 25,-20,-50);
  217.  AddPoint(Nr, 25,-20, 50);
  218.  AddPoint(Nr, 25,-50, 50);
  219.  
  220.  AddPoint(Nr, 25,  0,-20);
  221.  AddPoint(Nr, 25,  0, 20);
  222.  
  223.  AddPoint(Nr, 25,-20,  0);
  224.  AddPoint(Nr, 25, 20,  0);
  225.  
  226.  AddPoint(Nr, 25, 20,-50);
  227.  AddPoint(Nr, 25, 50,-50);
  228.  AddPoint(Nr, 25, 50, 50);
  229.  AddPoint(Nr, 25, 20, 50);
  230.  
  231.  AddPoint(Nr,-25,-50,-50);
  232.  AddPoint(Nr,-25,-20,-50);
  233.  AddPoint(Nr,-25,-20, 50);
  234.  AddPoint(Nr,-25,-50, 50);
  235.  
  236.  AddPoint(Nr,-25,  0,-20);
  237.  AddPoint(Nr,-25,  0, 20);
  238.  
  239.  AddPoint(Nr,-25,-20,  0); {19}
  240.  AddPoint(Nr,-25, 20,  0); {20}
  241.  
  242.  AddPoint(Nr,-25, 20,-50); {21}
  243.  AddPoint(Nr,-25, 50,-50); {22}
  244.  AddPoint(Nr,-25, 50, 50); {23}
  245.  AddPoint(Nr,-25, 20, 50); {24}
  246.  
  247.  AddPoint(Nr,-35, 20,-30); {25} {T van TV - Vertical part}
  248.  AddPoint(Nr,-35, 30,-30); {26}
  249.  AddPoint(Nr,-35, 25,-55); {27}
  250.  
  251.  
  252.  AddPoint(Nr,-35, 10,-30); {28} {T van TV - Horizontal part}
  253.  AddPoint(Nr,-35, 40,-25); {29}
  254.  AddPoint(Nr,-35, 40,-35); {30}
  255.  
  256.  AddPoint(Nr,-35, 35,-30); {31} {V van TV}
  257.  AddPoint(Nr,-35, 45,-55); {32}
  258.  AddPoint(Nr,-35, 50,-45); {33}
  259.  
  260.  AddPoint(Nr,-35, 45,-55); {34}
  261.  AddPoint(Nr,-35, 55,-30); {35}
  262.  AddPoint(Nr,-35, 65,-30); {36}
  263.  
  264.  AddPoint(Nr, 25,-25, 0); {37}
  265.  AddPoint(Nr, 25, 25, 0);
  266.  AddPoint(Nr,-25,-25, 0); {39}
  267.  AddPoint(Nr,-25, 25, 0);
  268.  
  269.  
  270.  AddSurface3(Nr,25,26,27,1,0);  {Voorkant TV-Tekens}
  271.  AddSurface3(Nr,28,29,30,1,0);
  272.  AddSurface3(Nr,31,33,32,9,0);
  273.  AddSurface3(Nr,35,36,34,9,0);
  274.  
  275.   { From Left&Right: (Links->Rechts, Onder->Boven, Achter->Voren) }
  276.  AddSurface4(Nr,16, 4, 1,13, 44,0);
  277.  AddSurface4(Nr, 7,19,14, 2, 46,0);
  278.  AddSurface4(Nr, 3,15,18, 6, 46,0);
  279.  AddSurface4(Nr,19, 7, 5,17, 44,0);
  280.  AddSurface4(Nr, 8,20,17, 5, 46,0);
  281.  AddSurface4(Nr,24,12, 6,18, 44,0);
  282.  AddSurface4(Nr,20, 8, 9,21, 44,0);
  283.  AddSurface4(Nr,11,23,22,10, 46,0);
  284.  
  285.  
  286.  
  287.   {From Below: (Van Onder->Boven)}
  288.  AddSurface4(Nr, 1, 2,14,13, 42,0);
  289.  AddSurface4(Nr, 9,10,22,21, 42,0);
  290.  
  291.   {From Above: (Van Onder->Boven)}
  292.  AddSurface4(Nr,16,15, 3, 4, 42,0);
  293.  AddSurface4(Nr,24,23,11,12, 42,0);
  294.  
  295.   {From Rear: (Van achter->Voren)}
  296.  
  297.  AddSurface4(Nr,15,16,13,14, 38,0);
  298.  AddSurface4(Nr,18,15,39,17, 38,0);
  299.  AddSurface4(Nr,24,18,17,40, 38,0);
  300.  AddSurface4(Nr,23,24,21,22, 38,0);
  301.  
  302.   {From Front: (Van achter->Voren)}
  303.  
  304.  AddSurface4(Nr,4,3,2,1,38,0);
  305.  AddSurface4(Nr,3,6,5,37,38,0);
  306.  AddSurface4(Nr,6,12,38,5,38,0);
  307.  AddSurface4(Nr,12,11,10,9,38,0);
  308.  
  309.  AddSurface3(Nr,26,25,27,1,0);  {Achterkant TV-Tekens}
  310.  AddSurface3(Nr,29,28,30,1,0);
  311.  AddSurface3(Nr,31,32,33,9,0);
  312.  AddSurface3(Nr,35,34,36,9,0);
  313. End;
  314.  
  315. Procedure MakeDiamond(Nr:Word);
  316. Begin
  317.  InitObject(Nr);
  318.  AddPoint(Nr, 20, 10,-20);
  319.  AddPoint(Nr, 10, 20,-20);
  320.  AddPoint(Nr,-10, 20,-20);
  321.  AddPoint(Nr,-20, 10,-20);
  322.  AddPoint(Nr,-20,-10,-20);
  323.  AddPoint(Nr,-10,-20,-20);
  324.  AddPoint(Nr, 10,-20,-20);
  325.  AddPoint(Nr, 20,-10,-20);
  326.  AddSurface4(Nr,1,2,3,4,127,4);
  327.  AddSurface4(Nr,1,4,5,8,127,4);
  328.  AddSurface4(Nr,8,5,6,7,127,4);
  329.  
  330.  AddPoint(Nr, 60, 30,25); {9}
  331.  AddPoint(Nr, 30, 60,25);
  332.  AddPoint(Nr,-30, 60,25);
  333.  AddPoint(Nr,-60, 30,25);
  334.  AddPoint(Nr,-60,-30,25);
  335.  AddPoint(Nr,-30,-60,25);
  336.  AddPoint(Nr, 30,-60,25);
  337.  AddPoint(Nr, 60,-30,25);
  338.  AddSurface4(Nr,9,10, 2,1,47,61);
  339.  AddSurface4(Nr,10,11,3,2,46,61);
  340.  AddSurface4(Nr,11,12,4,3,47,61);
  341.  AddSurface4(Nr,12,13,5,4,46,61);
  342.  AddSurface4(Nr,13,14,6,5,47,61);
  343.  AddSurface4(Nr,14,15,7,6,46,61);
  344.  AddSurface4(Nr,15,16,8,7,47,61);
  345.  AddSurface4(Nr,16, 9,1,8,46,61);
  346.  
  347.  AddPoint(Nr,0,0,100);
  348.  
  349. { AddSurface3(Nr,17,10, 9,126,61);
  350.  AddSurface3(Nr,17,11,10,125,1);
  351.  AddSurface3(Nr,17,12,11,126,61);
  352.  AddSurface3(Nr,17,13,12,125,1);
  353.  AddSurface3(Nr,17,14,13,126,61);
  354.  AddSurface3(Nr,17,15,14,125,1);
  355.  AddSurface3(Nr,17,16,15,126,61);
  356.  AddSurface3(Nr,17, 9,16,125,1);}
  357.  
  358.  AddSurface3(Nr,17,10, 9,46,61);
  359.  AddSurface3(Nr,17,11,10,47,61);
  360.  AddSurface3(Nr,17,12,11,46,61);
  361.  AddSurface3(Nr,17,13,12,47,61);
  362.  AddSurface3(Nr,17,14,13,46,61);
  363.  AddSurface3(Nr,17,15,14,47,61);
  364.  AddSurface3(Nr,17,16,15,46,61);
  365.  AddSurface3(Nr,17, 9,16,47,61);
  366.  
  367. End;
  368.  
  369. Procedure MakePyramid(Nr:Word);
  370. Begin
  371.  InitObject(Nr);
  372.  AddPoint(Nr, 50,-50,-10);
  373.  AddPoint(Nr, 50, 50,-10);
  374.  AddPoint(Nr,-50, 50,-10);
  375.  AddPoint(Nr,-50,-50,-10);
  376.  AddPoint(Nr,  0,  0, 80);
  377.  
  378.  AddPoint(Nr, 35,-35,-25);  {6}
  379.  AddPoint(Nr, 35, 35,-25);
  380.  AddPoint(Nr,-35, 35,-25);
  381.  AddPoint(Nr,-35,-35,-25);  {9}
  382.  AddPoint(Nr,  0,  0, 60);
  383.  
  384.  AddSurface3(Nr,7,10,6,6, 1);
  385.  AddSurface3(Nr,8,10,7,6, 2);
  386.  AddSurface3(Nr,9,10,8,6,14);
  387.  AddSurface3(Nr,6,10,9,6, 9);
  388.  AddSurface4(Nr,6,7,8,9,8,42);
  389.  
  390.  AddSurface3(Nr,4,3,5,25,0);
  391.  AddSurface3(Nr,1,4,5,26,0);
  392.  AddSurface3(Nr,2,1,5,25,0);
  393.  AddSurface3(Nr,3,2,5,26,0);
  394.  
  395.  AddSurface4(Nr,1,2,7,6,26,0);
  396.  AddSurface4(Nr,2,3,8,7,27,0);
  397.  AddSurface4(Nr,3,4,9,8,26,0);
  398.  AddSurface4(Nr,4,1,6,9,27,0);
  399. End;
  400.  
  401. Procedure FuzzyTab; Assembler;
  402. Asm
  403.  Db 0,1,2,4,4,2,1,0 { 8 values - Simple Sine-Wave }
  404.  Db 0               { FuzzyVal }
  405. End;
  406.  
  407. Procedure Water(Pa:Word; Fuzzy:Boolean); Assembler;
  408. Asm
  409.  Mov IsBusy,True
  410.  Mov Bx,Pa
  411.  Shl Bx,1
  412.  Add Bx,Offset PageSegment
  413.  Mov Es,[Bx]
  414.  
  415.  Mov Dx,3C4h   { Select all 4 planes for VidMem->VidMem Copy }
  416.  Mov Ax,0F02h
  417.  Out Dx,Ax
  418.  Mov Dx,3CEh   { Set VGA to Write Mode 1 }
  419.  Mov Al,5
  420.  Out Dx,Al
  421.  Mov Dx,3CFh
  422.  In  Al,Dx
  423.  Or  Al,1h
  424.  Mov Al,$41
  425.  Out Dx,Al
  426.  
  427.  Mov Dl,Cs:[Offset FuzzyTab+8]
  428.  Xor Dh,Dh
  429.  
  430.  Push Ds
  431.  Mov Ds,[Bx]
  432.  Mov Si,151*80 { Starting Y Row For Water Get }
  433.  Mov Di,150*80 { Starting Y Row For Water Put }
  434.  Mov Al,50     { Size of "Water Field"...     }
  435. @NextLine:
  436.  Mov Bx,0
  437.  Cmp Fuzzy,True
  438.  Jne @NextFuz
  439.  Mov Bx,Dx
  440.  Mov Bl,Cs:[Offset FuzzyTab+Bx]
  441.  Xor Bh,Bh
  442.  Inc Dx
  443.  Cmp Dx,8
  444.  Jl @NextFuz
  445.  Xor Dx,Dx
  446. @NextFuz:
  447.  Add Di,Bx
  448.  Mov Cx,80
  449.  Sub Cx,Bx
  450.  Rep MovsB
  451.  Add Si,Bx
  452.  Sub Si,320
  453.  Dec Al
  454.  Jnz @NextLine
  455.  Pop Ds
  456.  
  457.  Mov Cs:[Offset FuzzyTab+8],Dl
  458.  
  459.  Mov Dx,3CFh   { Set VGA to Write Mode 0 }
  460.  In  Al,Dx
  461.  And Al,0FCh
  462.  Out Dx,Al
  463.  Mov IsBusy,False
  464. End;
  465.  
  466. Var Count       : Word;
  467.     SCount      : Byte;
  468.     Ch          : Char;
  469.     VectorMusic : MusicType;
  470.  
  471. Const Fuzzy     : Boolean = False;
  472.  
  473. Begin {Main}
  474.  OpenGraphics;
  475.   If AdlibInstalled then                      { Do you have one of these?  }
  476.    Begin                                      { If not, It's not that you  }
  477.     LoadMusic(VectorMusic,'VECTDEMO.GMF');    { can't hear the music...    }
  478.     StartMusic(VectorMusic,0);                { You just don't want to ;-) }
  479.    End;
  480.  LoadFont('VECTDEMO.GFF',1);    { Set the font... }
  481.  SetFont(1);
  482.  SetSpacing(1);
  483.  
  484.  SetTextJustify(CenterText,TopText);
  485.  OutText(160,10,22,2,'TGK Vector Demonstration');
  486.  OutText(160,30,22,2,'(C)1993 Lennert Bakker');
  487.  OutText(160,80,1,2,'<SPACE> to switch Fuzzy-Mode');
  488.  
  489.  WireColor(47);
  490.  LineClipping:=True;
  491.  
  492.  MakeDiamond(2);
  493.  SetOrigin(2,160,115);
  494.  SizeObject(2,0.4);
  495.  
  496.  MakePresent(4);
  497.  SetOrigin(4,60,50);
  498.  SizeObject(4,0.3);
  499.  
  500.  MakeMTV(3);
  501.  SetOrigin(3,260,110);
  502.  SizeObject(3,0.5);
  503.  
  504.  MakePyramid(1);
  505.  SetOrigin(1,160,100);
  506.  SizeObject(1,0.05);
  507.  
  508.   Repeat
  509.    MoveOrigin(1,X1,Y1);
  510.    MoveOrigin(2,X2,Y2);
  511.  
  512.    RotateObject(1, 10,  8,  9);
  513.    RotateObject(2,-14, 14, -8);
  514.    RotateObject(3, 15, 10, -8);
  515.    RotateObject(4, 10,-15, 15);
  516.  
  517.     Case ClipObject(1,25,MaxX-25,25,MaxY-25) of
  518.      ClipLeft   : X1:=Abs(X1);
  519.      ClipRight  : X1:=-Abs(X1);
  520.      ClipTop    : Y1:=Abs(Y1);
  521.      ClipBottom : Y1:=-Abs(Y1);
  522.     End;
  523.  
  524.     Case ClipObject(2,25,MaxX-25,25,MaxY-25) of
  525.      ClipLeft   : X2:=Abs(X2);
  526.      ClipRight  : X2:=-Abs(X2);
  527.      ClipTop    : Y2:=Abs(Y2);
  528.      ClipBottom : Y2:=-Abs(Y2);
  529.     End;
  530.  
  531.    CurPage:=1-CurPage;
  532.    CopyPage(2,CurPage);
  533.  
  534.    HideObject(1);
  535.    HideObject(2);
  536.    HideObject(3);
  537.    HideObject(4);
  538.  
  539.    DrawObjectFilled(4,CurPage);
  540.    DrawObjectFilled(2,CurPage);
  541.    DrawObjectFilled(3,CurPage);
  542.    DrawObjectFilled(1,CurPage);
  543.  
  544.     If SCount<18 then
  545.      Begin
  546.       Inc(SCount);
  547.       SizeObject(1,1.12);
  548.      End;
  549.  
  550.    Water(CurPage,Fuzzy);
  551.    ZeroLine(0,134,319,134,1,CurPage);  { This is sneaky - Find out! }
  552.    ZeroLine(0,135,319,135,1,CurPage);
  553.  
  554.    Sync;
  555.    SetPage(CurPage);
  556.  
  557.     If Keypressed then
  558.      Begin
  559.       Ch:=Readkey;
  560.        If Ch=#32 then Fuzzy:=Not Fuzzy;
  561.      End;
  562.  
  563.   Until Ch=#27;
  564.  DisposeAllObjects;
  565.  CloseGraphics;
  566.  Writeln('Goodbye from Vector Demonstration');
  567.  Writeln;
  568.  Writeln('Huh, this demo needs like car accidents and screaming tires.');
  569.  Writeln('Yeah, right!');
  570.  Writeln;
  571.  Writeln('Aaaargh, DOS again!');
  572.  Writeln;
  573. End.